// 1. 提取用户传入的命令行参数（排除前2个默认参数）
const userArgs = process.argv.slice(2);

/**
 * 2. 定义使用说明（当参数不合法时输出）
 */
function printUsage() {
  console.log('=== 命令行计算器使用说明 ===');
  console.log('用法：node calc.js <数学表达式>');
  console.log('示例：');
  console.log('  node calc.js "1+2*3"    // 输出 7');
  console.log('  node calc.js "Math.PI*2" // 输出 6.283185307179586');
  console.log('参数说明：');
  console.log('  -h / --help：查看使用说明');
  console.log('  仅支持1个数学表达式参数，多余参数会被忽略');
}

/**
 * 3. 验证参数合法性并处理
 */
// 情况1：无参数 或 参数为 -h/--help
if (userArgs.length === 0 || userArgs.includes('-h') || userArgs.includes('--help')) {
  printUsage();
  process.exit(0); // 正常退出程序（退出码0表示无错误）
}

// 情况2：参数多于1个，忽略多余参数（仅取第1个参数作为表达式）
const expression = userArgs[0];
if (userArgs.length > 1) {
  console.log(`⚠️  警告：检测到${userArgs.length}个参数，仅使用第一个参数：${expression}`);
}

/**
 * 4. 计算表达式结果（使用eval函数，注意：仅用于学习场景，生产环境避免使用eval）
 */
try {
  // eval函数：将字符串作为JavaScript代码执行（这里用于计算数学表达式）
  const result = eval(expression);

  // 验证结果是否为有效数字（排除NaN、Infinity等情况）
  if (typeof result === 'number' && !isNaN(result) && isFinite(result)) {
    console.log('=== 计算结果 ===');
    console.log(`表达式：${expression}`);
    console.log(`结果：${result}`);
  } else {
    console.error('❌ 错误：表达式计算结果不是有效数字');
    process.exit(1); // 错误退出程序（退出码1表示有错误）
  }
} catch (error) {
  // 捕获语法错误（例如：表达式不合法，如a+b）
  console.error('❌ 错误：无效的数学表达式');
  console.error('错误详情：', error.message);
  process.exit(1);
}